A data storage arrangement in a data processing system is generally made up of one or more fixed disk drives or other physical storage devices which may be referred to as physical volumes. One or more logical volumes may be defined in a physical storage device or group of physical devices. Data in a logical volume appears to be contiguous to a user, but is usually discontiguous and in fact spread throughout the physical volumes included in the data storage arrangement.
Although each physical storage device has its own device controller operating under the control of its own program code for performing functions at the device, the logical volume or volumes defined in the various storage devices are controlled and managed through software external to the devices themselves. This external software defines, manages, and controls the logical volume or volumes is commonly referred to as a volume manager. The volume manager may be thought of as an intermediary between the operating system or file system and the physical devices that make up the storage arrangement. The logical volume manager may be incorporated into the operating system software for the particular computer system or may be separate from the operating system.
Among the other functions performed by the logical volume manager, the logical volume manager receives data access instructions or requests from the operating system or application software, processes the instructions or requests, issues data access requests to the physical storage devices, and receives and processes information from the physical storage devices indicating that the particular data access instruction or request has been done or performed. The data access requests to be issued to a physical storage device will be referred to in this disclosure and the accompanying claims as input/output request or IO request. These IO requests are commonly issued to the physical storage device or devices through a device driver component included in the logical volume manager. The device driver is responsible for formulating the IO request suitable of use by the physical storage devices and also for receiving signals from the physical storage device or devices regarding the completion of the IO request at the physical device and passing the appropriate information or message back to other components of the logical volume manager. The signal the device driver receives back from the physical storage device indicating the requested data access action has been completed at the device is referred to in this disclosure as an IO done signal or simply an “IO done.”
Logical volume managers have historically not allowed overlapping or nonserialized IO requests to be issued to the underlying physical devices. An overlapping or nonserialized IO request is one that specifies the same data storage address or a portion of the same address in the physical storage device as another IO request that has been issued to the physical device or devices and is currently pending completion at the physical storage device. The address locations comprise blocks of storage space and may be referred to as blocks or pages. Logical volumes defined so that they do not allow such overlapping IO requests are referred to as serialized logical volumes. Although there are advantages to serialized logical volumes, serialization requires further processing that may be unnecessary considering that most software applications do not allow actions that would result in overlapping IO requests to the physical devices. Thus, more recent data storage arrangements do not prevent overlapping or nonserialized IO requests. In these data storage arrangements, no overlap checking is done by the logical volume manager or device driver and IO requests are simply issued to the physical storage devices without regard to any overlapping address condition. The logical volumes defined in these data storage arrangements that allow overlapping IO requests may be referred to as nonserialized logical volumes.
Although it may be beneficial in the majority of instances to use nonserialized logical volumes in a data storage arrangement, there may be situations in which it is necessary or desirable to serialize IO requests. Also, there may be situations in which actions that must be taken to accommodate nonserialized volumes slows IO request processing and execution: One example of a situation in which the use of nonserialized logical volumes slows IO request processing is in the case of a write IO request during the time that an operating system is in snapshot mode. In snapshot mode, the operating system creates a copy or snapshot of the file system at a point of time and maintains the snapshot or copy for as long as the user requires. The state of the snapshot or copy must be preservedin the face of operations that would affect the state of the file system. In particular, when a write operation is requested while the file system in snapshot mode, the data, if any, that was at the address to be written to will be lost in lieu of the new data to be written. Thus, while the file system is in snapshot mode a write IO request must be preceded by a read IO request to read the data at the specified address to a buffer memory arrangement. Once the data at the specified address is buffered or stored as necessary to maintain the desired snapshot, the write IO request may be executed to write the new data to the specified memory address. However, because the read IO request and write IO request specify the same address in memory and because the read IO request must be performed before the write IO request is performed, prior art logical volume managers for nonseriafized logical volumes had to hold the write IO request until the read IO request was completed in order to ensure that the read IO request was performed first. Having to hold all write IO requests in this fashion while the file system was operating in snapshot mode effectively slowed the execution of all such write IO requests.